昨天介紹完 @AppStorage,今天來介紹一下一個好玩的 View。
在 iOS 16 之後 SwiftUI 棄用 NavigationView,改用 NavigationStack。
在使用 NavigationStack 時,如果沒有 title 或是其他物件的話,NavigationBar 預設會隱藏起來,所以需要新增一些 modifier 來顯示 NavigationBar。
NavigationStack {
VStack(alignment: .center, spacing: 50) {
}
.toolbar(.visible, for: .navigationBar)
.toolbarBackground(Color("navigationBar"), for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
.navigationBarTitleDisplayMode(.inline)
}
在看成果之前,先來解釋一下:
toolbar(.visible, for: .navigationBar)
這個 modifier 將 toolbar 設定為可見,因為原本 NavigationBar 內若沒有設定 title 或其他東西,會隱藏起來,所以這行是將 toolbar 設為可見,用來搭配下面的 modifier。
toolbarBackground(Color("navigationBar"), for: .navigationBar)
這個 modifier 是設定 toolbar 的背景顏色為 "navigationBar"。
toolbarBackground(.visible, for: .navigationBar)
這個 modifier 的功能是將 toolbar 背景設為可見。
navigationBarTitleDisplayMode(.inline)
這個 modifier 是將 NavigationBar 的樣式固定。
接下來看看成果,成功顯示出來了。
接下來介紹一下 NavigationLink,這裡是用 NavigationLink 來執行跳頁的功能,讓我有點意外的是 NavigationLink 竟然能適用 Button 的 modifier。
NavigationStack {
VStack(alignment: .center, spacing: 50) {
NavigationLink(destination: MarketingPageView()) {
Text("開始使用").font(.system(size: 21))
.frame(minWidth: 0, maxWidth: .infinity)
.padding(5)
}
.tint(.red)
.buttonStyle(.borderedProminent)
}
.padding()
.toolbar(.visible, for: .navigationBar)
.toolbarBackground(Color("navigationBar"), for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
.navigationBarTitleDisplayMode(.inline)
NavigationLink(destination: MarketingPageView())
這行 NavigationLink 裡指定了要跳轉的頁面。
除此之外 NavigationLink 還有很多變化,例如:
NavigationLink(title: StringProtocol, destination: () -> View)
NavigationLink(value: (Decodable & Encodable & Hashable)?, label: () -> View)等。
來看看成果,看起來就跟 Button 一樣。
那關於 NavigationStack 就先介紹到這裡。